2 Lezione 3 - 02/10
- Modello Information Retrieval: quadrupla [D, Q, F, R(q_i, d_j)] dove:
- D è il modello di rappresentazione dei documenti del corpus
- Q è il modello di rappresentazione delle query dell’utente
- F è il modo in cui documenti e query sono modellate (quindi, sono modellate allo stesso modo)
- R(q_i, d_j) è la funzione di ranking, ovvero è una funzione che restituisce quanto d_j è rilevante rispetto a q_i con il modello con cui rappresento documenti e query
- Preprocessing:
- Rimuovere i caratteri inutili (punteggiatura, numeri, …) e markup (HTML tags, …)
- Splittare le parole sulla base degli spazi^1 in tokens
- Stemming: semplificare le parole alla loro radice linguistica in comune in modo che parole simili scritte in forma diversa possano essere trattate come la stessa parola. Ad esempio “automate”, “automates” e “automatic” diventano “automat”
- Lemmatization: ridurre le parole alla loro voce presente nel dizionario (lemma). Ad esempio, le parole “better,” “best,” and “good” vengono riportate a “good” perchè condividono lo stesso lemma.
- Rimuovere le stopwords, ovvero parole con scarso contenuto informativo che non permettono di discriminare tra documenti rilevanti e non, in modo da ridurre di circa il 30% il testo a disposizione
- Individuare parole comuni e trattarle alla stregua delle stopwords
- Costruire l’indice invertito
- Modello booleano:
- Documento: insieme di keywords
- Query: insieme di keywords e connettori
- Output: documenti rilevanti (ovvero se keywords \in doc)
- Posso rappresentare le parole e i documenti in un vettore di incidenza, dove come righe ho le parole e come colonne ho i documenti, e ogni casella ha il valore 1 se word \in doc, 0 altrimenti
- Rappresentazione concettuale, per capire il meccanismo, ovviamente non vado ad utilizzare questa rappresentazione, perchè sarebbe molto inefficiente e avrei una matrice sparsa soprattutto. Utilizzerò l’indice invertito
- Per rispondere alla query si prendono i vettori delle parole, e si utilizza un operazione bitwise per ottenere i documenti rilevanti (i documenti con valore 1 corrispondenti nel vettore di incidenza)
Esempio
\begin{bmatrix} & Antony\; and\; Cleopatra& Julius\; Caesar & The\; Tempest & Hamlet & Othello & Macbeth \\ Antony & 1& 1& 0 &0&0&1 \\Brutus & 1 & 1 & 0 & 1 & 0 & 0 \\Caesar & 1 & 1 & 0 & 1 &1 & 1 \\Calpurnia & 0 & 1 & 0 & 0 & 0 & 0 \\ mercy & 1 & 0 & 1 & 1 & 1 & 1 \end{bmatrix}
Brutus AND Caesar BUT NOT Calpurnia
Prendo i vettori:
- Brutus: 110100
- Caesar 110111
- Calpurnia (complementato) 101111
Opero il Bitwise:
- 110100 AND 110111 AND 101111 = 100100
Risultato: I documenti rilevanti sono il primo (Antony and Cleopatra) e il quarto (Hamlet)
Pro | Contro |
---|---|
Modello molto semplice | Non vi è ranking |
Non preservo l’ordine e il numero di occorrenze delle parole | |
Difficile esprimere richieste utente complesse, perchè andrebbero trasformate in espressioni booleane | |
Difficoltà nel controllare il numero di documenti rilevanti, perchè tutti saranno risultato della query | |
Difficoltà nel fare relevance feedback: non so come modificare la query per tenere conto del feedback utente |
^1 può essere reso più smart, ad esempio se consideriamo la parola San Francisco, è ovvio che vogliamo che questo sia un singolo token e che non venga diviso sulla base dello spazio